package jzOffer;

public class Num14of1 {
    //动态规划
    public int cuttingRope(int n) {
        int[] dp=new int[n+1];
        dp[2]=1;//初始化绳子长度为2时，最大乘积为1
        for(int i=3;i<n+1;i++){//绳子长度从3开始算起
            for(int j=1;j<=i/2;j++){//当j>i/2时，最大乘积的值就与就j<=i/2时相等了
                dp[i]=Math.max(dp[i],Math.max(j*(i-j),j*dp[i-j]));//当切掉的长度为j时，最大乘积由两种情况，
                // 要么不再切了，乘积为j*(i-j)，如果还要继续切，乘积为j*dp[i-j])
            }
        }
        return dp[n];
    }

    //数学法
//    public int cuttingRope(int n) {
//        if(n<=3) return n-1;
//        int a=n/3;
//        int b=n%3;
//        if(b==0) return (int)Math.pow(3,a);
//        if(b==1) return (int)Math.pow(3,a-1)*4;
//        return (int)Math.pow(3,a)*2;
//    }
}
